﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace DataTier.Repository
{
    /// <summary>
    /// Репозиторий для работы с товарамии категориями
    /// </summary>
    public class ProductRepository : RepositoryBase
    {
        public ProductRepository()
        {

        }

        public ProductRepository(IDbConnection connection)
            : base(connection)
        {

        }


        /// <summary>
        /// Возвращается список продуктов, входящих в категорию с Id = groupId
        /// </summary>
        /// <param name="groupId"></param>
        /// <returns></returns>
        public IQueryable<Product> ProductsByCategory(int? groupId = null)
        {
            using (var dbcontext = CreateDataContext())
            {
                var products = dbcontext.Product
                    .Include("ProductType")
                    .Include("GroupProduct")
                    .Include("User")
                    .Include("User1")
                    .Include("ProductFoto")
                    .Include("ProductFoto.Foto").AsQueryable();

                if (groupId.HasValue)
                    products = products.Where(p => p.GroupId == groupId).AsQueryable();

                return products;
            }
        }


        /// <summary>
        /// Возвращается список дочерних подкатегорий товаров для заданной категории товаров
        /// </summary>
        /// <param name="parentGroupId"></param>
        /// <returns></returns>
        public IQueryable<GroupProduct> GroupsByParentId(int parentGroupId)
        {
            using (var dbcontext = CreateDataContext())
            {
                var groups = dbcontext.GroupProduct
                    .Include("GroupProduct1")
                    .Include("GroupProduct2")
                    .Where(g => g.ParentId == parentGroupId).AsQueryable();
                return groups;
            }
        }


        /// <summary>
        /// Возвращается корневой список категорий товаров, самого верхнего уровня
        /// </summary>
        /// <returns></returns>
        public IQueryable<GroupProduct> GroupsRoot()
        {
            using (var dbcontext = CreateDataContext())
            {
                var groups = dbcontext.GroupProduct
                    .Include("GroupProduct1")
                    .Include("GroupProduct2")
                    .Where(g => g.ParentId == null).AsQueryable();
                return groups;
            }
        }


    }
}
